package com.demo.creational.builder;

/**
 * 建造者模式
 * 适合于复杂对象的创建，该模式实现类将复杂过程给封装起来，如需拓展，则实现类继承抽象类或实现接口，然后
 * 在类里实现各种复杂过程即可，符合开闭原则
 * @author fanjinbo
 *
 */
public class Test {
	
	public static void main(String[] args) { 
        //服务员（指挥者，负责生成对象）  
        KFCWaiter waiter = new KFCWaiter();  
        //套餐A（具体建造者，实现类，实现抽象接口的具体细节）  
        MealA a = new MealA();  
        //服务员准备套餐A（负责生成对象）  
        waiter.setMealBuilder(a);  
        //获得套餐（负责生成对象）    
        Meal mealA = waiter.construct();  
          
        System.out.print("套餐A的组成部分:");  
        System.out.println(mealA.getFood()+"---"+mealA.getDrink());  
        
        //如需拓展，则新建类继承抽象类或实现接口
        //套餐B
        MealB b = new MealB();  
        //服务员准备套餐B  
        waiter.setMealBuilder(b);  
        //获得套餐  
        Meal mealB = waiter.construct();  
          
        System.out.print("套餐B的组成部分:");  
        System.out.println(mealB.getFood()+"---"+mealB.getDrink());          
        
	}

}
